#pragma once

#include <iostream>
#include <memory>
#include <mutex>
#include <cassert>
#include <unordered_map>
#include "../mqcommon/mq_helper.hpp"
#include "../mqcommon/mq_logger.hpp"
#include "../mqcommon/mq_msg.pb.h"


namespace bitmq
{
    using ConsumerCallBack = std::function<void(const std::string&,  const BasicProperties* , const std::string&)>;
    //1. 定义消费者信息结构
    struct Consumer
    {
    public:
        using ptr = std::shared_ptr<Consumer>;
        Consumer(){}
        Consumer(const std::string &ctag, const std::string& queue_name, bool ack_flag, const ConsumerCallBack& cb)
            : tag(ctag)
            , qname(queue_name)
            , callback(cb)
            , auto_ack(ack_flag)
        {
            DLOG("new Consumer: %s", ctag.c_str());
        }
        ~Consumer()
        {
            DLOG("delete Consumer: %s", tag.c_str());
        }

    public:
        std::string tag;   // 1）消费者标识
        std::string qname;  // 2）订阅的队列名称
        ConsumerCallBack callback; // 3）一个消息的处理回调函数
        bool auto_ack;    // 4）是否自动应答标志
    };
}